Jalé el código fuente de esta nota de Animal Político https://www.animalpolitico.com/2021/01/puebla-regresa-semaforo-rojo-12-estados-alerta-maxima/.
pagina = readLines('https://www.animalpolitico.com/2021/01/puebla-regresa-semaforo-rojo-12-estados-alerta-maxima/')
R “jala” el código fuente DE TODA la página con una función que se llama readLines y pone todo el código en una vector caracter.
Todo el código junto no sirve de nada, R jala hasta los anuncios publicitarios de los lados.
Tenemos que diferenciar entre las líneas que conforman el artículo y las que solo sirven para programar la página.
Revisando el código fuente veo que el patrón de los renglones de este artículo empiezan con p span style=font-weight: 400
patron <- '<p><span style="font-weight: 400">'
Y termina con /span y /p. Los nombro patron y patron2.
patron2 <- '</span></p>'
Uso grep para decirle que se quede con todos los renglones del vector que empiezan con el patrón del texto, para que me deje las líneas que sí importan.
datalines = grep(patron,pagina[1:length(pagina)],value=TRUE)
Con gsub le quito los caracteres del principio (patron) y del final (patron2) de código fuente que me estorban.
Si no se los quito, me van a salir como los más repetidos y no tiene lógica.
result = gsub(patron,'',datalines)
result = gsub(patron2,'',result)
Y listo, ya tengo un vector de caracteres solo con el contenido que me importa de la nota y lo hago una base de datos con una sola columna.
Cada renglón de la base es un párrafo de la nota y cambio el nombre de la única columna al nombre texto.
result <- as.data.frame(result)
nuevo <- "texto"
names(result) <- nuevo
result
#> texto
#> 1 El semáforo epidemiológico de Puebla regresó a rojo. Esto, como resultado a un alza de contagios por COVID-19, especialmente del día miércoles 27 de enero, afirmó el gobernador de la entidad, Miguel Barbosa Huerta.
#> 2 Añadió que la medida ya había sido advertida, por lo cual se estaba actuando en consecuencia con nuevas medidas para contener el incremento de casos confirmados.
#> 3 “Las medidas que hemos establecido deberán dar resultados en días siguientes, estamos seguros que pronto saldremos de este rojo, de la calificación del Semáforo Epidemiológico”.
#> 4 En su conferencia diaria matutina, Barbosa pidió a los poblanos solidaridad con las medidas, a fin de cuidarse entre ellos mismos.
#> 5 “Hoy todavía no tenemos la respuesta que esperábamos, pero las medidas tendrán que generar su resultado, estamos en rojo”, finalizó.
#> 6 Autoridades poblanas señalaron el contagio de 166 autoridades municipales contagiadas por COVID-19, de las cuales 35 eran presidentes de los municipios y 166 miembros del gobierno local. Entre ellos, hubo cuatro fallecimientos de los primeros y 27 de los últimos.
#> 7 Hasta el corte del 27 de enero, Puebla contaba con 58 mil 510 casos confirmados con COVID-19 y 7 mil 405 defunciones por la enfermedad.
#> 8 El regreso del estado a semáforo rojo se compagina con el de Guerrero, anunciado con un día de anterioridad por el titular ejecutivo local, Héctor Astudillo.
#> 9 Así pues, la adición de ambos estados da como resultado 12 entidades en Semáforo Rojo. Las que previamente se encontraban en este listado son: Ciudad de México, Estado de México, Guanajuato, Morelos, Tlaxcala, Querétaro, Hidalgo, Jalisco, Coahuila y Nuevo León.
Hago una nube de prueba:
words <- select(result, texto) %>% na.omit()
corp_quanteda <- corpus(words$texto)
Nube <- dfm(corp_quanteda, remove = stopwords("spanish"), remove_punct = TRUE)%>%
dfm_trim(min_termfreq = 1)
textplot_wordcloud(Nube, min_count = 1, comparison = FALSE, max_words = 300, adjust = 0, rotation = 0.1, random_order = FALSE,
random_color = FALSE, ordered_color = FALSE,
color = c("#0f4c42", "#cb2833", "#91d400", "#174a80", "#ffc200"))+
theme_minimal()
#> NULL
Todo en orden.
Hago una red de palabras cruzadas solo para confirmar que no salió ninguna incoherencia.
tag_fcm <- fcm(Nube)
textplot_network(tag_fcm, min_freq = 0.1, edge_alpha = 0.8, edge_size = 5)
Listo :)